package moodle.Org;


import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;

import moodle.dados.Aluno;
import moodle.dados.Curso;
import moodle.dados.atividades.AtividadeNota;
import moodle.dados.atividades.AtividadeParticipacao;
import moodle.dados.atividades.DataBase;
import moodle.dados.atividades.LaboratorioDeAvaliacao;
import moodle.dados.mensagem.Mensagem;
import dao.GerenciaCurso;
import dao.MoodleDAO;

public class GerenciadorBeans implements Runnable{
	
	private GerenciaCurso gerenciador;
	private boolean mantemAtualizando;
	private MoodleEnv environment;
	
	public GerenciadorBeans(GerenciaCurso gerenciador, MoodleEnv env){
		this.gerenciador = gerenciador;
		this.environment = env;
		mantemAtualizando = true;
		
	}
	
	public void setMantemAtualizando(boolean m){
		mantemAtualizando = m;
	}
	
	@Override
	public void run() {
		
		
		
		
			try {
		
				
				while(mantemAtualizando){
		
					gerenciador.getCursos().clear();
					
					
					gerenciador.addCursos();
					List<Curso> listaCursos =  gerenciador.getCursos();
					
					for(Curso c: listaCursos ){	
						System.out.println(c.getFullName());
						GerenciaCurso.addAlunosCurso(c);
						//GerenciaCurso.addAtividadePesquisaAvaliacao(c);
						GerenciaCurso.addAtividadeWiki(c);
						GerenciaCurso.addAtividadeQuestionario(c);
						//GerenciaCurso.addAtividadeScorm(c);
						GerenciaCurso.addAtividadeTarefas(c);
						GerenciaCurso.addAtividadeFerramentaExterna(c);
						GerenciaCurso.addAtividadeGlossario(c);
						GerenciaCurso.addAtividadeLicao(c);
						GerenciaCurso.addAtividadeLaboratorioDeAvaliacao(c);
						GerenciaCurso.addAtividadeBancoDeDados(c);
						GerenciaCurso.addAtividadeEscolha(c);
						GerenciaCurso.addAtividadeChat(c);
						GerenciaCurso.addAtividadeForum(c);
						
						
						
						Set<Aluno> listaAlunos =  c.getAlunos();
						System.out.printf("\nAlunos:\n");
						
						for(Aluno a : listaAlunos){
							System.out.println(a.getCompleteName());
						}
						
						
						System.out.println("\n\nAtividades:\n");
						Set<AtividadeNota> listaAtividadeN = c.getAtividadesNota();
						Set<AtividadeParticipacao> listaAtividadeP = c.getAtividadesParticipacao();
						for(AtividadeNota a : listaAtividadeN){
							System.out.println("Nome: " + a.getName());
							System.out.println("Data inicio: " + a.getDataInicio().toString());
							System.out.println("Data final: " + a.getDataFinal().toString());
							
							Map<Aluno, BigDecimal> alNotasMap = a.getAlunosComNotas();
							
							if(!alNotasMap.isEmpty()){
							
								for(Map.Entry<Aluno, BigDecimal> results : alNotasMap.entrySet()){
									System.out.println(results.getKey().getFirstName() + " " + results.getValue());
								}
							}
							
							if(a instanceof LaboratorioDeAvaliacao){
								Map<Aluno, BigDecimal> alNotasMap2 = ((LaboratorioDeAvaliacao) a).getNota2();
								
								if(!alNotasMap2.isEmpty()){
								
									for(Map.Entry<Aluno, BigDecimal> results : alNotasMap2.entrySet()){
										System.out.println(results.getKey().getFirstName() + " " + results.getValue());
									}
								}
							}
						}
						
						System.out.println("--------------*********************-------------------");
						System.out.println();
						
						for(AtividadeParticipacao a : listaAtividadeP){

							System.out.println("Nome: " + a.getName());
							System.out.println("Data inicio: " + a.getDataInicio().toString());
							System.out.println("Data final: " + a.getDataFinal().toString());
							
							Set<Aluno> alunos = a.getAlunosParticipantes();
							for(Aluno al : alunos){
								System.out.print(al.getCompleteName() + " ");

							}
							
							System.out.println();
							
							Map<Aluno, BigDecimal> alNotasMap = a.getAlunosComNotas();
							
							if(!alNotasMap.isEmpty()){
							
								for(Map.Entry<Aluno, BigDecimal> results : alNotasMap.entrySet()){
									System.out.println(results.getKey().getFirstName() + " " + results.getValue());
								}
							}
							
							
							
							System.out.println("---------------------");
							System.out.println();
						}
						
						System.out.println("***************************************");
						
						
						System.out.printf("\n\n FIM CURSO \n\n");
						
						List<Mensagem> mensagens = environment.getMensagens();
						
						if(!mensagens.isEmpty()){
							
							System.out.println("\n ADICIONANDO MENSAGENS \n");
							
							for(Mensagem msg : mensagens){
								
								MoodleDAO.persistMensagem(msg);
							}
							
							mensagens.clear();
						}
						
						
						
					}
					
					environment.setMantemAgentesAtivos(true);
					Thread.sleep(5000);

				}
				
				
				
			} catch (InterruptedException e) {
				System.out.println("Exception sleep thread");
				System.exit(1);
			}finally{
				environment.setMantemAgentesAtivos(false);
				MoodleDAO.closeEntityFactory();
			}
			
		
				
	}

}
